package com.zuipin.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.zuipin.entity.RedPacket;
import com.zuipin.util.Pagination;
import com.zuipin.vo.RedPacketDetailVo;
import com.zuipin.vo.RedPacketShowVo;

/**
 * RedPacketMapper数据库操作接口类
 * 
 * @ClassName: RedPacket
 * @author wuyicheng 
 * @time 2017年4月18日下午4:43:18 
 **/

@Mapper
public interface RedPacketMapper {
	
	/**
	 * 查询（根据主键ID查询）
	 * 
	 * @author: wuyicheng 
	 * @date: 2017年4月18日下午4:50:31 
	 **/
	public RedPacket findById(@Param("id") Long id);
	
	/**
	 * 删除（根据主键ID删除）
	 * 
	 * @author: wuyicheng 
	 * @date: 2017年4月18日下午4:50:31 
	 **/
	public int deleteByPrimaryKey(@Param("id") Long id);
	
	/**
	 * 添加 （匹配有值的字段）
	 * 
	 * @author: wuyicheng 
	 * @date: 2017年4月18日下午4:50:31 
	 **/
	public int insert(RedPacket redPacket);
	
	/**
	 * 修改 （匹配有值的字段）
	 * 
	 * @author: wuyicheng 
	 * @date: 2017年4月18日下午4:50:31 
	 **/
	public int update(RedPacket redPacket);
	
	/** 
	 * 分页查询红包
	 * 
	 * @Title: findListByPage 
	 * @author: wuyicheng
	 * @date: 2017年4月24日下午5:06:20 
	 * @param redPacket
	 * @param page
	 * @return
	 * @return: List<RedPacket>
	 * @throws 
	 */
	public List<RedPacket> findListByPage(@Param("redPacket") RedPacket redPacket, @Param("page") Pagination page);
	
	/** 
	 * 查询红包列表
	 * 
	 * @Title: findList 
	 * @author: wuyicheng
	 * @date: 2017年4月25日上午12:38:57 
	 * @param redPacket
	 * @return
	 * @return: List<RedPacket>
	 * @throws 
	 */
	public List<RedPacket> findList(@Param("redPacket") RedPacket redPacket);
	
	/** 
	 * 统计红包数量
	 * 
	 * @Title: countRedPacket 
	 * @author: wuyicheng
	 * @date: 2017年4月27日下午5:59:36 
	 * @param redPacket
	 * @return
	 * @return: int
	 * @throws 
	 */
	public long countRedPacket(RedPacket redPacket);
	
	/** 
	 * 查询单个红包
	 * 
	 * @Title: findByRedPacket 
	 * @author: wuyicheng
	 * @date: 2017年5月3日上午9:41:10 
	 * @param redPacket
	 * @return
	 * @return: RedPacket
	 * @throws 
	 */
	public RedPacket findByRedPacket(RedPacket redPacket);
	
	/** 
	 * 查询未激活且在活动时间内的红包
	 * 
	 * @Title: findNoActivateByRuleId 
	 * @author: wuyicheng
	 * @date: 2017年5月18日下午5:40:20 
	 * @param ruleId
	 * @param sysId
	 * @return
	 * @return: RedPacket
	 * @throws 
	 */
	public RedPacket findNoActivateByRuleId(@Param("ruleId") Long ruleId, @Param("sysId") Long sysId, @Param("dateTime") String dateTime, @Param("status") String status);
	
	/**
	 * 批量新增
	 * @param reds
	 */
	public void insertBatch(@Param("reds") String[] reds, @Param("item") RedPacket redPacket);
	
	/**
	 * 根据规则Id修改状态
	 * @param ruleId
	 */
	public void modityStatusByRuleId(@Param("ruleId") Long ruleId, @Param("sysId") Long sysId, @Param("status") String status);
	
	public List<RedPacketDetailVo> findRedPacketListPage(@Param("redVo") RedPacketDetailVo vo);
	
	public Map<String, Object> findRedPacketDetailById(RedPacket red);
	
	/** 
	 * 根据规则ID和系统ID查询序列号
	 * 
	 * @Title: findSerialNumber 
	 * @author: wuyicheng
	 * @date: 2017年7月12日上午11:25:55 
	 * @param ruleSetIds
	 * @param sysId
	 * @return
	 * @return: Result<SendRedPacketResult>
	 * @throws 
	 */
	public List<Map<String, Object>> findSerialNumber(@Param("ruleSetIds") String[] ruleIds, @Param("sysId") Long sysId);
	
	public int batchUpdate(List<RedPacket> redPacketList);
	
	public List<RedPacketShowVo> findRedPacketByStatus(@Param("memberId") Long memberId, @Param("sysId") Long sysId, @Param("status") String status,
			@Param("page") Pagination page);
	
	public List<Map<String, Object>> searchGetNumByMemberId(@Param("sysId") Long sysId, @Param("createRuleId") Long createRuleId, @Param("joinNums") Integer joinNums);
	
	public List<RedPacketShowVo> findUnusedRedPacket(@Param("memberId") Long memberId, @Param("sysId") Long sysId, @Param("nTime") String nTime, @Param("page") Pagination page);
	
	public List<RedPacketShowVo> findExpiredRedPacket(@Param("memberId") Long memberId, @Param("sysId") Long sysId, @Param("nTime") String nTime, @Param("page") Pagination page);
	
	public void findRedPacketCount(@Param("sysId") Long sysId);
	
	/**
	 * 回收订单送的红包
	 */
	public void updateOrderSend(@Param("sendOrderId") Long sendOrderId, @Param("memberId") Long memberId);
	
	/**
	 * 查询订单送的红包
	 */
	public List<RedPacket> selectOrderSend(@Param("sendOrderId") Long sendOrderId, @Param("memberId") Long memberId);
}